import gsApi from '@/api/gsApi';

export default class DataManager{
  // 地图列表
  mapList = new Array();

  //位置信息
  loadPoint = new Array();

  // 手画图列表
  graphList=new Array();

  // 手画图路径名字数组 graphName:pathName. 用于v-for
  graphPathsNameList=new Array();

    // 手画点
  positionNameList=new Array();;

  // 手画图线段数组 哈希表： graphName -> lines[ ]
  graphLinesMap=new Map();

  // 手画图点数组 哈希表： graphName -> points[ ]
  graphPointsMap=new Map();

  // 当前的数据指向
  current={
    mapName:'',
    graphPathName:'',
    graphName:'',
    location:'',
    positionName:'',
  }

  /**
   * 空构造函数
   */
  constructor(){

  }

  /**
   * 加载地图列表
   */
  async loadMaps(){
    const res=await gsApi.getMapList()
    this.mapList=res.data.data;

  }

  async location(){
    const res=await gsApi.getLocation()
    this.loadPoint=res.data;
    // console.log(this.currentPosition);
  }


  /**
   * 
   * 根据地图名称，加载该地图的手画路径列表
   * @param mapName
   * 
   */
  async loadGraphs(mapName){
    // 加载哪张地图手画路径，就设为当前地图
    this.current.mapName = mapName;
    const res= await gsApi.getDeviceGraphPathsByMapName(mapName)
    // 这里需要等数据加载完再赋值
    this.graphList=res.data.data;

    // 根据原生返回数据，解析成程序要用的数据存放
    this.__parseData(this.graphList);
  }


  /**
   * 解析http返回的数据，再装载
   * @param graphList
   */
  __parseData(graphList){
    this.graphPointsMap.clear();
    this.graphLinesMap.clear();
    this.graphPathsNameList=[];
    this.positionNameList=[];

    graphList.forEach(graph=>{
      // 添加点集合
      const points=graph.points;
      this.graphPointsMap.set(graph.name, points);

      // 添加线集合
      const lines=graph.lines;
      this.graphLinesMap.set(graph.name,lines);

      const paths=graph.paths;
      paths.forEach(path=>{
        const graphPathName=`${graph.name}:${path.name}`;
        // 这里主要方便前端的v-for 展示
        this.graphPathsNameList.push(graphPathName);
      })
    })
  }
}
